package gob.cgr.web.sgrh.managed;

import gob.cgr.sgrh.ejb.entidad.Documento;
import gob.cgr.sgrh.ejb.entidad.Personal;
import gob.cgr.sgrh.ejb.entidad.SolicitudDocumento;
import gob.cgr.sgrh.ejb.entidad.Usuario;
import gob.cgr.web.sgrh.service.SigerhService;
import gob.cgr.web.sgrh.util.Utilitario;


import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import javax.inject.Inject;



@ManagedBean
@ViewScoped
public class SolicitudDocumentoMB  {
	
	
	@Inject
	SigerhService service;
	
	private Personal colaborador;
	private SolicitudDocumento solicitud;
	private SolicitudDocumento solicitudSelected;
	private List<SolicitudDocumento> solicitudes;
	private Date desde=new Date();
	private Date hasta=new Date();
	private String estadoSolicitud;
	private List<SelectItem> listaEstadosSolicitud;
	
	@ManagedProperty(value="#{usuarioMB}")
	UsuarioMB usuarioMB;
	
	public SolicitudDocumentoMB() {
	// TODO Auto-generated constructor stub
		System.out.println("SolicitudDocumentoMB constructor");
	}

	@PostConstruct
	public void init(){
		System.out.println("iniciando solicitud");
		solicitud=new SolicitudDocumento();
		solicitud.setTipoDocumento(new Documento());
		if(listaEstadosSolicitud==null){
			listaEstadosSolicitud=new ArrayList<SelectItem>();
			SelectItem item=new SelectItem("","Todas");
			SelectItem item1=new SelectItem("P","PENDIENTE");
			SelectItem item2=new SelectItem("A","ANULADA");
			SelectItem item3=new SelectItem("E","ENTREGADA");
			listaEstadosSolicitud.add(item);
			listaEstadosSolicitud.add(item1);
			listaEstadosSolicitud.add(item2);
			listaEstadosSolicitud.add(item3);
		}
		
		Calendar c=Calendar.getInstance();
		hasta=c.getTime();
		c.roll(Calendar.MONTH, -1);
		desde=c.getTime();
		
	}
	
	public void nuevaSolicitud(){
		solicitud=new SolicitudDocumento();
		solicitud.setTipoDocumento(new Documento());
	}
	

	public Personal getColaborador() {
		colaborador=service.buscarPersonalPorDNI(usuarioMB.getUser().getIdPersona().getNroDocumento());
				
		return colaborador;
	}


	public void setColaborador(Personal colaborador) {
		this.colaborador = colaborador;
	}


	public SolicitudDocumento getSolicitud() {
		return solicitud;
	}


	public void setSolicitud(SolicitudDocumento solicitud) {
		this.solicitud = solicitud;
	}


	public List<SolicitudDocumento> getSolicitudes() {
		return solicitudes;
	}


	public void setSolicitudes(List<SolicitudDocumento> solicitudes) {
		this.solicitudes = solicitudes;
	}


	public Date getDesde() {
		return desde;
	}


	public void setDesde(Date desde) {
		this.desde = desde;
	}


	public Date getHasta() {
		return hasta;
	}


	public void setHasta(Date hasta) {
		this.hasta = hasta;
	}


	public String getEstadoSolicitud() {
		return estadoSolicitud;
	}


	public void setEstadoSolicitud(String estadoSolicitud) {
		this.estadoSolicitud = estadoSolicitud;
	}
	
	public UsuarioMB getUsuarioMB() {
		return usuarioMB;
	}

	public void setUsuarioMB(UsuarioMB usuarioMB) {
		this.usuarioMB = usuarioMB;
	}

	public void registrarNuevaSolicitud(){
		System.out.println("registrando la solicitud "+usuarioMB.getUser());
		try {
			//nuevaSolicitud();
			Personal p=getColaborador();
			solicitud.setIdPersonal(p);
			service.registrarSolicitudDocumento(solicitud);
			Utilitario.mostrarMensajeExito("La solicitud de documento se ha realizado correctamente");
			nuevaSolicitud();
		} catch (Exception e) {
			// TODO: handle exception
			Utilitario.mostrarMensajeAlerta("No se pudo registrar la solicitud." +e.getMessage());
		}
		
		
	}

	
	
	
	public List<SelectItem> getListaEstadosSolicitud() {
		return listaEstadosSolicitud;
	}

	public void setListaEstadosSolicitud(List<SelectItem> listaEstadosSolicitud) {
		this.listaEstadosSolicitud = listaEstadosSolicitud;
	}
	
	public void listarSolicitudes(){
			solicitudes=service.listarConsultaSolicitudes(getColaborador().getIdPersonal(), desde, hasta, estadoSolicitud);
	}
	
	public void anularSolicitud(){
		if(solicitudSelected==null){
			Utilitario.mostrarMensajeAlerta("Seleccione la solicitud a anular");
			return;
		}
		try {
			solicitudSelected.setEstado("A");//Anulada
			service.actualizarSolicitudDocumento(solicitudSelected);
			Utilitario.mostrarMensajeExito("Se ha anulado la solcitud de documento");
		} catch (Exception e) {
			// TODO: handle exception
			Utilitario.mostrarMensajeAlerta("Ha ocurrido un error al intentar anular la solicitud");
		}
		
	}

	public SolicitudDocumento getSolicitudSelected() {
		return solicitudSelected;
	}

	public void setSolicitudSelected(SolicitudDocumento solicitudSelected) {
		this.solicitudSelected = solicitudSelected;
	}
	
}
